LCOV - code coverage report
Current view: top level - src - RVCController.cpp (source / functions) Coverage Total Hit
Test: RVC Unit Test Coverage Lines: 100.0 % 58 58
Test Date: 2026-05-30 18:11:50 Functions: 100.0 % 6 6

            Line data    Source code
       1              : #include "RVCController.hpp"
       2              : #include "CleaningController.hpp"
       3              : #include "NavigationController.hpp"
       4              : 
       5           52 : RVCController::RVCController(NavigationController& nav, CleaningController& cleaning)
       6           52 :     : nav_(nav), cleaning_(cleaning), state_(State::IDLE), leftClear_(false) {}
       7              : 
       8           26 : void RVCController::start() {
       9           26 :     cleaning_.startCleaning();
      10           26 :     nav_.moveForward();
      11           26 :     state_ = State::CLEANING;
      12           26 : }
      13              : 
      14           22 : void RVCController::frontObstacleDetected() {
      15           22 :     cleaning_.stopCleaning();
      16           22 :     nav_.stop();
      17           22 :     state_ = State::STOPPED;
      18           22 : }
      19              : 
      20           55 : void RVCController::sideStatus(Direction /*direction*/, bool clear) {
      21           55 :     switch (state_) {
      22              :         case State::STOPPED:
      23              :             // SD-002: sideStatus(LEFT) 수신 — rotateRight로 우측 스캔 준비
      24           20 :             leftClear_ = clear;
      25           20 :             nav_.rotateRight();
      26           20 :             state_ = State::STOPPED_CHECKING_RIGHT;
      27           20 :             break;
      28              : 
      29              :         case State::STOPPED_CHECKING_RIGHT:
      30              :             // SD-002: sideStatus(RIGHT) 수신 — rotateLeft로 정면 복귀 후 방향 결정
      31           19 :             nav_.rotateLeft();
      32           19 :             if (leftClear_) {
      33            4 :                 nav_.turn(Direction::LEFT);
      34            4 :                 cleaning_.startCleaning();
      35            4 :                 nav_.moveForward();
      36            4 :                 state_ = State::CLEANING;
      37           19 :             } else if (clear) {
      38            3 :                 nav_.turn(Direction::RIGHT);
      39            3 :                 cleaning_.startCleaning();
      40            3 :                 nav_.moveForward();
      41            3 :                 state_ = State::CLEANING;
      42            3 :             } else {
      43              :                 // E1: 좌·우 모두 막힘 → UC-003
      44           12 :                 nav_.moveBackward();
      45           12 :                 state_ = State::REVERSING;
      46              :             }
      47           19 :             break;
      48              : 
      49              :         case State::REVERSING:
      50              :             // SD-003 루프: sideStatus(LEFT) 수신
      51           10 :             if (clear) {
      52            4 :                 nav_.stop();
      53            4 :                 nav_.turn(Direction::LEFT);
      54            4 :                 nav_.moveForward();
      55            4 :                 cleaning_.startCleaning();
      56            4 :                 state_ = State::CLEANING;
      57            4 :             } else {
      58            6 :                 nav_.rotateRight();
      59            6 :                 state_ = State::REVERSING_CHECKING_RIGHT;
      60              :             }
      61           10 :             break;
      62              : 
      63              :         case State::REVERSING_CHECKING_RIGHT:
      64              :             // SD-003 루프: sideStatus(RIGHT) 수신 — rotateLeft로 정면 복귀
      65            5 :             nav_.rotateLeft();
      66            5 :             if (clear) {
      67            3 :                 nav_.stop();
      68            3 :                 nav_.turn(Direction::RIGHT);
      69            3 :                 nav_.moveForward();
      70            3 :                 cleaning_.startCleaning();
      71            3 :                 state_ = State::CLEANING;
      72            3 :             } else {
      73            2 :                 state_ = State::REVERSING;
      74              :             }
      75            5 :             break;
      76              : 
      77              :         default:
      78            1 :             break;
      79              :     }
      80           55 : }
      81              : 
      82            1 : void RVCController::dustDetected() {
      83            1 :     cleaning_.boostCleaning();
      84            1 : }
        

Generated by: LCOV version 2.4-0